package Entities;

/**
 *
 * @author 647_2
 *
 * Абстрактный класс базовой сущности, все сущности должны от него наследовать.
 */
public abstract class BaseEntity {

    /**
     * Уникальный идентификатор сущности
     */
    protected Long ID;
    
    /**
     * Описание сущности
     */
    protected String description;

    /**
     * Создание сущности
     */
    public BaseEntity() {
        this.ID = null;
        this.description = "";
    }

    /**
     * Создание сущности
     * @param ID Уникальный идентификатор сущности
     */
    public BaseEntity(Long ID) {
        this.ID = ID;
        this.description = "";
    }

    /**
     * Создание сущности
     * @param ID Уникальный идентификатор сущности
     */
    public BaseEntity(int ID) {
        this.ID = new Long(ID);
        this.description = "";
    }

    /**
     * Создание сущности
     * @param ID Уникальный идентификатор сущности
     * @param description Описание сущности
     */
    public BaseEntity(Long ID, String description) {
        this.ID = ID;
        this.description = description;
    }

    /**
     * Создание сущности
     * @param ID Уникальный идентификатор сущности
     * @param description Описание сущности
     */
    public BaseEntity(int ID, String description) {
        this.ID = new Long(ID);
        this.description = description;
    }

    /**
     * Создание сущности
     * @param ID Уникальный идентификатор сущности
     * @param description Описание сущности
     */
    public BaseEntity(String description) {
        this.ID = null;
        this.description = description;
    }

    /**
     * Возвращает описание сущности
     * @return Описание сущности
     */
    public String getDescription() {
        return description;
    }

    /**
     * Устанавливает описание сущности
     * @param description Описание сущности
     */
    public void setDescription(String description) {
        this.description = description;
    }

    /**
     * Получение уникального идентификатора сущности
     * @return Уникальный идентификатор сущности
     */
    public Long get_ID() {
        return ID;
    }

    /**
     * Получение уникального идентификатора сущности в виде int
     * @return Уникальный идентификатор сущности
     */
    public int getIDAsInt() {
        return ID.intValue();
    }

    /**
     * Установка уникального идентификатора сущности
     */
    public void set_ID(Long ID) {
        this.ID = ID;
    }

    /**
     * Установка уникального идентификатора сущности
     */
    public void set_ID(int ID) {
        this.ID = new Long(ID);
    }

    /**
     * Возвращает описание сущности
     * @return Описание сущности
     */
    @Override
    public String toString(){
        return this.getClass().getName() + " (" + description + ")";
    }
}
